"""
boot.py - MicroPython 开机引导脚本（可选）

这个文件在设备启动时最先执行，在 main.py 之前
通常用于系统初始化、WiFi 连接、时钟同步等

如果不需要开机时的特殊配置，可以不创建此文件
"""

import gc
import machine
import time

# ========== 基础系统配置 ==========

def init_system():
    """
    系统初始化
    """
    print("\n" + "=" * 50)
    print("🚀 MicroPython 设备启动中...")
    print("=" * 50)

    # 显示设备信息
    print(f"设备类型: {machine.unique_id().hex()}")
    print(f"频率: {machine.freq() / 1_000_000:.0f} MHz")

    # 垃圾回收
    gc.collect()
    print(f"可用内存: {gc.mem_free()} bytes")

    print("=" * 50)


# ========== WiFi 连接配置（可选）==========

def connect_wifi(ssid, password, timeout=10):
    """
    连接到 WiFi 网络（ESP32/ESP8266 适用）

    Args:
        ssid: WiFi 名称
        password: WiFi 密码
        timeout: 超时时间（秒）

    Returns:
        bool: 连接是否成功
    """
    try:
        import network

        wlan = network.WLAN(network.STA_IF)
        wlan.active(True)

        if wlan.isconnected():
            print(f"✅ 已连接到 WiFi: {ssid}")
            print(f"IP 地址: {wlan.ifconfig()[0]}")
            return True

        print(f"📡 正在连接 WiFi: {ssid}")
        wlan.connect(ssid, password)

        # 等待连接
        start = time.time()
        while not wlan.isconnected():
            if time.time() - start > timeout:
                print(f"❌ WiFi 连接超时")
                return False
            time.sleep(0.5)
            print(".", end="")

        print()
        print(f"✅ WiFi 连接成功！")
        print(f"IP 地址: {wlan.ifconfig()[0]}")
        return True

    except ImportError:
        print("⚠️ 当前设备不支持 WiFi")
        return False
    except Exception as e:
        print(f"❌ WiFi 连接失败: {e}")
        return False


# ========== WebREPL 配置（可选）==========

def enable_webrepl():
    """
    启用 WebREPL（WiFi REPL）
    需要先配置 WebREPL 密码：
    在 REPL 中执行：import webrepl_setup
    """
    try:
        import webrepl
        webrepl.start()
        print("✅ WebREPL 已启动")
        return True
    except ImportError:
        print("⚠️ WebREPL 未安装")
        return False
    except Exception as e:
        print(f"❌ WebREPL 启动失败: {e}")
        return False


# ========== 主启动流程 ==========

def boot():
    """
    启动流程
    """
    # 1. 系统初始化
    init_system()

    # 2. WiFi 连接（如果需要）
    # 取消下面的注释并填入你的 WiFi 信息
    # WIFI_SSID = "你的WiFi名称"
    # WIFI_PASSWORD = "你的WiFi密码"
    # connect_wifi(WIFI_SSID, WIFI_PASSWORD)

    # 3. 启用 WebREPL（如果需要）
    # enable_webrepl()

    print("\n✨ boot.py 执行完成，即将运行 main.py...\n")


# ========== 执行启动 ==========
if __name__ == "__main__":
    try:
        boot()
    except Exception as e:
        print(f"❌ boot.py 执行出错: {e}")
        # 即使 boot.py 出错，设备仍会继续尝试运行 main.py


# ========== 使用说明 ==========
"""
📝 boot.py 使用说明：

1. boot.py 是可选的
   - 如果不需要开机时的特殊配置，可以不创建此文件
   - 只有 main.py 是实现自动运行必需的

2. 执行顺序
   设备上电 → boot.py（如果存在）→ main.py

3. 典型用途
   - WiFi 连接配置
   - 网络时间同步
   - 系统参数设置
   - WebREPL 启动
   - SD 卡挂载
   - 传感器初始化

4. 上传方法
   - 右键点击此文件 → "Upload File to Device"
   - 输入路径：/boot.py（必须是根目录）

5. WiFi 连接示例
   取消 boot() 函数中的注释，并填入你的 WiFi 信息：
   ```python
   WIFI_SSID = "MyWiFi"
   WIFI_PASSWORD = "MyPassword"
   connect_wifi(WIFI_SSID, WIFI_PASSWORD)
   ```

⚠️ 注意事项：
- boot.py 中的错误不会阻止 main.py 运行
- 但建议在 boot.py 中添加 try-except 确保稳定性
- 不要在 boot.py 中执行耗时过长的操作
- 敏感信息（如 WiFi 密码）建议存储在单独的配置文件中

💡 最佳实践：
- 保持 boot.py 简洁，只做必要的初始化
- 主要业务逻辑放在 main.py 中
- 先在 RAM 中测试，确认无误后再上传
"""
